package com.richdown.movie.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Random;



public class DateUtil {
	/**
	 * 将String类型的日期转成date
	 * @param date
	 * @return
	 */
	public static Date string2Date(String date,String format)
	{
		SimpleDateFormat df=new SimpleDateFormat(format);
		try {
			return df.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 * 计算两个日期相差天数
	 * @param startDate 开始日期，格式为yyyyMMdd，不能有时分秒
	 * @param endDate
	 * @return
	 */
	public static long dateMinus(Date startDate,Date endDate)
	{
		return (endDate.getTime()-startDate.getTime())/(24*60*60*1000);
	}
	/**
	 * 计算日期加指定天数后所得日期
	 * @param date 原始日期
	 * @param day 所加天数（负数时为减）
	 * @return
	 */
	public static Date sumDate(Date date,int day)
	{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
//		System.out.println(calendar.get(Calendar.DAY_OF_MONTH));// 今天的日期
		calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + day);// 让日期加1
//		System.out.println(calendar.get(Calendar.DATE));// 加1之后的日期Top
		return calendar.getTime();
	}
	/**
	 * 获取前一个月
	 * @param date
	 * @return
	 */
	public static String getPreviousMonth(Date date)
	{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);// 让日期加1
		SimpleDateFormat df=new SimpleDateFormat("yyyyMM");
		return df.format(calendar.getTime());
	}
	/**
	 * 获取指定月天数
	 * @param month yyyyMM
	 * @return
	 */
	public static int getMonthDays(String month){


        Calendar   cal   =   new   GregorianCalendar();
        //或者用Calendar   cal   =   Calendar.getInstance();

        /**设置date**/
        SimpleDateFormat oSdf = new SimpleDateFormat ("yyyyMM");
        try {
            cal.setTime(oSdf.parse(month));
        } catch (ParseException e) {
            e.printStackTrace();
        }

        /**开始用的这个方法获取实际月的最大天数**/
        int num2 = cal.getActualMaximum(Calendar.DAY_OF_MONTH);



		return num2;
	}
	
	public static String getRandomDate(int num){
		Random rd = new Random();
		
		String res = String.valueOf(System.currentTimeMillis());
		for(int i=0; i<num;i++){
			res = res + rd.nextInt(9);
		}
		
		return res;
	}
	
	/**
	 * 计算date1和date2相差的秒数（date1-date2）
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static long subDate(Date date1,Date date2){

		  long l = date1.getTime()-date2.getTime()>0 ? date1.getTime()-date2.getTime():
		  date2.getTime()-date1.getTime();
		  return l/1000;
	}
	
	/**
	 * 得到当前日期前后几月的某一日期
	 * @param dateFormat 时间格式
	 * @param monthNum 1月前：-1，1月后：1
	 * @return
	 */
	public static String getMonthTime(String dateFormat,int monthNum){
		Calendar currTime = GregorianCalendar.getInstance();
		DateFormat bdf = new SimpleDateFormat(dateFormat);
		currTime.add(Calendar.MONTH, monthNum);
		Date date = currTime.getTime();
        String time = bdf.format(date);
        return time;
	}
	
	/**
	 * 将date转成string
	 * @param date 需转换的日期
	 * @param dateFormat 日期格式 如yyyy-MM-dd HH:mm:ss
	 * @return
	 */
	public static String date2String(Date date,String dateFormat)
	{
		SimpleDateFormat df=new SimpleDateFormat(dateFormat);
		try {
			return df.format(date);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	public static void main(String[] args) {
//		String date="20121012170149";
//		Date date2=DateUtil.string2Date(date, "yyyyMMddHHmmssS");
//		System.out.println(DateUtil.date2String(date2, "yyyyMMddHH:mm:ss SSS"));
		System.out.println(DateUtil.date2String(DateUtil.sumDate(new Date(), 36500), "yyyyMMdd"));
	}
}
